package com.zdy.im.user.service;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.io.InputStream;


import com.zdy.im.user.dto.request.ImJoinFriendRequestDto;
import com.zdy.im.user.dto.request.ImJoinFriendStatusRequestDto;
import com.zdy.im.user.dto.response.ImJoinFriendResponseDto;
import com.sixeco.framework.common.data.BasePage;
import com.sixeco.framework.util.PageUtils;
import com.sixeco.framework.http.data.vo.ResponseResultList;


/**
 * @ClassName: ImJoinFriendService.java
 * @Description: 用户加为好友申请信息记录表的数据交互处理类
 * @Author 作者 : zdy
 * @CreateDate 创建时间: 2021-02-30
 * @version V1.0.0
 * <p>
 * ----------------------------------------------------------------------------
 *  modifyer    modifyTime                 comment
 *
 * ----------------------------------------------------------------------------
 * </p>
 */
public interface ImJoinFriendService {



    /**
     * 保存用户加为好友申请信息记录表更新数据库和缓存的实现方法
     * @param imJoinFriendRequestDto  ImJoinFriendRequestDto
     * @return
     */
    ImJoinFriendResponseDto saveImJoinFriend(ImJoinFriendRequestDto imJoinFriendRequestDto);

    /**
     * 保存用户加为好友申请信息记录表更新数据库和缓存的实现方法
     *  @param entityList
     *  @param batchSize
     * @return
     */
    boolean saveBatchImJoinFriend(Collection<ImJoinFriendRequestDto> entityList, int batchSize);

    /**
     * 保存用户加为好友申请信息记录表更新数据库和缓存的实现方法
     * @param entityList
     * @param batchSize
     * @return
     */
    boolean saveOrUpdateBatchImJoinFriend(Collection<ImJoinFriendRequestDto> entityList, int batchSize);



    /**
     * 更新用户加为好友申请信息记录表同时更新数据库和缓存的实现方法
     * @param imJoinFriendRequestDto  ImJoinFriendRequestDto
     * @return
     */
    boolean updateImJoinFriend (ImJoinFriendRequestDto imJoinFriendRequestDto);

    /**
     * 更新用户加为好友申请信息记录表同时更新数据库和缓存的实现方法
     * @param imJoinFriendRequestDto  ImJoinFriendRequestDto
     * @return
     */
    boolean updateImJoinFriendStatus (ImJoinFriendStatusRequestDto imJoinFriendRequestDto);

    /**
     * 更新用户加为好友申请信息记录表同时更新数据库和缓存的实现方法
     *  @param entityList
     *  @param batchSize
     * @return
     */
    boolean updateBatchById(Collection<ImJoinFriendRequestDto> entityList, int batchSize);


    /**
     * 通过主键ID删除对象信息实现缓存和数据库,同时删除的方法
     * @param  imJoinFriendIds
     * @return
     */
    int delImJoinFriendByIds(List<Long>  imJoinFriendIds);


    /**
     * 通过主键ID更新对象用户加为好友申请信息记录表实现缓存和数据库更新的方法
     * @param  imJoinFriendId
     * @return
     */
        ImJoinFriendResponseDto getImJoinFriendById(long imJoinFriendId);



    /**
     * 通过分页获取ImJoinFriendResponseDto信息实现查找缓存和数据库的方法
     * @param page BasePage
     * @return
     */
    List<ImJoinFriendResponseDto> getImJoinFriendByPage(BasePage page);




    /**
     * 通过分页获取ImJoinFriend 用户加为好友申请信息记录表信息实现查找缓存和数据库的方法
     * @param page BasePage
     * @return
     * @author suven
     * @date 2021-05-26 15:14:07
     */
    ResponseResultList<ImJoinFriendResponseDto> getImJoinFriendByNextPage(BasePage page);


    /**
     * 通过用户id分页获取ImJoinFriend 用户加为好友申请信息记录表信息实现查找缓存和数据库的方法
     * @param basePage BasePage
     * @return
     * @author suven
     * @date 2021-05-26 15:14:07
     */
     List<ImJoinFriendResponseDto> getImJoinFriendByUserIdPage(BasePage basePage);
    /**
     * 通过map组装参数查询
     * @param params
     * @return
     */
    public PageUtils queryPage(Map<String, Object> params);


    /**
    * 通过上传excel 保存数据到数据库
    * @param initialStream
    * @return
    */
    public boolean saveData(InputStream initialStream);



    /** 通过申请人id 和被申请加为好的人的Id,查看两人是否加为好友
     * @param imJoinFriendRequestDto
     * @return ImJoinFriendResponseDto
     * **/
    ImJoinFriendResponseDto getImJoinFriendByUserAndFriendId(ImJoinFriendStatusRequestDto imJoinFriendRequestDto);
}